#include <gdk/gdkkeysyms.h>
+#if defined (GDK_WINDOWING_X11)
+#include "x11/gdkx.h"
+#elif defined (GDK_WINDOWING_WIN32)
+#include "win32/gdkwin32.h"
+#elif defined(GDK_WINDOWING_FB)
+#include "linux-fb/gdkfb.h"
+#elif defined (GDK_WINDOWING_NANOX)
+#include "nanox/gdkprivate-nanox.h"
+#endif
+
/* The "background" areas of all rows/cells add up to cover the entire tree.
* The background includes all inter-row and inter-cell spacing.
gint y;
};
+
+typedef struct _GtkTreeViewColumnReorder GtkTreeViewColumnReorder;
+struct _GtkTreeViewColumnReorder
+{
+ gint left_align;
+ gint right_align;
+ GtkTreeViewColumn *left_column;
+ GtkTreeViewColumn *right_column;
+};
+
enum
{
ROW_ACTIVATED,
GtkTreeIter *iter,
gint depth);
static void gtk_tree_view_check_dirty (GtkTreeView *tree_view);
-#if 0
-static void gtk_tree_view_create_button (GtkTreeView *tree_view,
- gint i);
-static void gtk_tree_view_create_buttons (GtkTreeView *tree_view);
-#endif
static void gtk_tree_view_clamp_node_visible (GtkTreeView *tree_view,
GtkRBTree *tree,
GtkRBNode *node);
tree_view->priv->pressed_button = -1;
tree_view->priv->press_start_x = -1;
tree_view->priv->press_start_y = -1;
+ tree_view->priv->drag_window = NULL;
gtk_tree_view_set_adjustments (tree_view, NULL, NULL);
_gtk_tree_view_update_size (tree_view);
do_unprelight (tree_view, -1000, -1000); /* coords not possibly over an arrow */
}
+
+static gint
+gtk_tree_view_column_button_expose (GtkWidget *button,
+ GdkEventExpose *event,
+ gpointer right)
+{
+ if (button->window != event->window)
+ return FALSE;
+
+ if (GPOINTER_TO_INT (right))
+ {
+ if (event->area.x + event->area.width < button->allocation.width - 2)
+ return FALSE;
+
+ gdk_draw_line (button->window,
+ button->style->black_gc,
+ button->allocation.width - 2, 0,
+ button->allocation.width - 2,
+ button->allocation.height);
+ gdk_draw_line (button->window,
+ button->style->white_gc,
+ button->allocation.width - 1, 0,
+ button->allocation.width - 1,
+ button->allocation.height);
+ }
+ else
+ {
+ if (event->area.x > 2)
+ return FALSE;
+
+ gdk_draw_line (button->window,
+ button->style->black_gc,
+ 1, 0,
+ 1, button->allocation.height);
+ gdk_draw_line (button->window,
+ button->style->white_gc,
+ 0, 0,
+ 0, button->allocation.height);
+ }
+
+ return FALSE;
+}
+
static gboolean
gtk_tree_view_motion (GtkWidget *widget,
GdkEventMotion *event)
return FALSE;
}
+ if (event->window == tree_view->priv->drag_window)
+ {
+ GtkTreeViewColumn *column = tree_view->priv->drag_column;
+ gint x, y;
+
+ if (column == NULL)
+ return FALSE;
+ gdk_window_get_position (tree_view->priv->drag_window, &x, &y);
+ x = CLAMP (x + (gint)event->x - column->drag_x, 0,
+ MAX (tree_view->priv->width, GTK_WIDGET (tree_view)->allocation.width) - column->button->allocation.width);
+
+ gdk_window_move (tree_view->priv->drag_window, x, y);
+ return TRUE;
+ }
+
/* Sanity check it */
if (event->window != tree_view->priv->bin_window)
return FALSE;
tree_view = GTK_TREE_VIEW (widget);
+ if (tree_view->priv->drag_column)
+ {
+ gdk_pointer_ungrab (GDK_CURRENT_TIME);
+ gdk_window_reparent (tree_view->priv->drag_column->button->window,
+ tree_view->priv->header_window,
+ tree_view->priv->drag_column->button->allocation.x,
+ tree_view->priv->drag_column->button->allocation.y);
+ gtk_widget_set_parent_window (tree_view->priv->drag_column->button, tree_view->priv->header_window);
+
+ tree_view->priv->drag_column = NULL;
+ gtk_widget_queue_resize (GTK_WIDGET (tree_view));
+ gdk_window_hide (tree_view->priv->drag_window);
+
+ return TRUE;
+ }
+
if (tree_view->priv->pressed_button == event->button)
tree_view->priv->pressed_button = -1;
gtk_tree_path_get_depth (path) + 1,
FALSE,
GTK_WIDGET_REALIZED (widget));
-
}
}
}
GtkTreePath *path,
GtkTreeViewColumn *column)
{
- g_return_if_fail (tree_view != NULL);
g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
g_signal_emit (G_OBJECT(tree_view), tree_view_signals[ROW_ACTIVATED], 0, path, column);
}
+
+void
+gtk_tree_view_map_open_rows (GtkTreeView *tree_view,
+ GtkTreeViewMappingFunc func,
+ gpointer data)
+{
+ g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
+ g_return_if_fail (func != NULL);
+
+
+}
+
/* TreeModel Callbacks
*/
column->dirty = FALSE;
}
}
-#if 0
-static void
-gtk_tree_view_create_buttons (GtkTreeView *tree_view)
-{
- GtkWidget *alignment;
- GtkWidget *label;
- GList *list;
- GtkTreeViewColumn *column;
- gint i;
- GtkWidget *hbox;
- GtkWidget *arrow;
-
- /* FIXME this has to be merged with update_button_contents() in
- * gtktreeviewcolumn.c
- */
-
- for (list = tree_view->priv->columns, i = 0; list; list = list->next, i++)
- {
- column = list->data;
-
- if (column->button != NULL)
- continue;
-
- gtk_tree_view_create_button (tree_view, i);
- alignment = gtk_alignment_new (column->xalign, 0.5, 0.0, 0.0);
-
- hbox = gtk_hbox_new (FALSE, 2);
- arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_IN);
-
- column->arrow = arrow;
- column->alignment = alignment;
-
- if (column->child)
- label = column->child;
- else
- {
- label = gtk_label_new (column->title);
- gtk_widget_show (label);
- }
-
- if (column->xalign <= 0.5)
- gtk_box_pack_end (GTK_BOX (hbox), arrow, FALSE, FALSE, 0);
- else
- gtk_box_pack_start (GTK_BOX (hbox), arrow, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (hbox), alignment, TRUE, TRUE, 0);
-
- gtk_container_add (GTK_CONTAINER (alignment), label);
- gtk_container_add (GTK_CONTAINER (column->button), hbox);
-
- gtk_widget_show (hbox);
- gtk_widget_show (alignment);
- /* don't show the arrow yet */
- }
-
- gtk_tree_view_size_request_buttons (tree_view);
-
- if (GTK_WIDGET_REALIZED (tree_view))
- gtk_tree_view_realize_buttons (tree_view);
-
- if (GTK_WIDGET_MAPPED (tree_view))
- gtk_tree_view_map_buttons (tree_view);
-}
-#endif
/* Make sure the node is visible vertically */
static void
gtk_tree_path_free (path);
}
+void
+_gtk_tree_view_column_start_drag (GtkTreeView *tree_view,
+ GtkTreeViewColumn *column)
+{
+ GdkEvent send_event;
+ GList *list = NULL;
+ GList *tmp_list;
+ gint left, right;
+ GtkTreeViewColumn *left_column;
+ GtkTreeViewColumn *right_column;
+
+ /* We want to precalculate the motion list such that we know what column slots
+ * are available.
+ */
+ left = 0;
+ left_column = NULL;
+
+ for (tmp_list = tree_view->priv->columns; tmp_list; tmp_list = tmp_list->next)
+ {
+ GtkTreeViewColumnReorder *reorder;
+
+ if (GTK_TREE_VIEW_COLUMN (tmp_list->data)->visible == FALSE)
+ continue;
+
+ right_column = tmp_list->data;
+ reorder = g_malloc (sizeof (GtkTreeViewColumnReorder), 1);
+ reorder->left_align = left;
+ }
+ /* if (list == NULL)
+ return;*/
+
+ if (tree_view->priv->drag_window == NULL)
+ {
+ GdkWindowAttr attributes;
+ guint attributes_mask;
+
+ attributes.window_type = GDK_WINDOW_CHILD;
+ attributes.wclass = GDK_INPUT_OUTPUT;
+ attributes.visual = gtk_widget_get_visual (GTK_WIDGET (tree_view));
+ attributes.colormap = gtk_widget_get_colormap (GTK_WIDGET (tree_view));
+ attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK | GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK;
+ attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+
+ tree_view->priv->drag_window = gdk_window_new (tree_view->priv->bin_window,
+ &attributes,
+ attributes_mask);
+ gdk_window_set_user_data (tree_view->priv->drag_window, GTK_WIDGET (tree_view));
+ }
+
+ gdk_pointer_ungrab (GDK_CURRENT_TIME);
+ gdk_keyboard_ungrab (GDK_CURRENT_TIME);
+
+ gtk_grab_remove (column->button);
+
+ send_event.crossing.type = GDK_LEAVE_NOTIFY;
+ send_event.crossing.send_event = TRUE;
+ send_event.crossing.window = column->button->window;
+ send_event.crossing.subwindow = NULL;
+ send_event.crossing.detail = GDK_NOTIFY_ANCESTOR;
+ send_event.crossing.time = GDK_CURRENT_TIME;
+
+ gtk_propagate_event (column->button, &send_event);
+
+ send_event.button.type = GDK_BUTTON_RELEASE;
+ send_event.button.window = GDK_ROOT_PARENT ();
+ send_event.button.send_event = TRUE;
+ send_event.button.time = GDK_CURRENT_TIME;
+ send_event.button.x = -1;
+ send_event.button.y = -1;
+ send_event.button.axes = NULL;
+ send_event.button.state = 0;
+ send_event.button.button = 1;
+ send_event.button.device = gdk_core_pointer;
+ send_event.button.x_root = 0;
+ send_event.button.y_root = 0;
+
+ gtk_propagate_event (column->button, &send_event);
+
+ gdk_window_move_resize (tree_view->priv->drag_window,
+ column->button->allocation.x,
+ column->button->allocation.y + column->button->allocation.height,
+ column->button->allocation.width,
+ column->button->allocation.height);
+ gdk_window_reparent (column->button->window, tree_view->priv->drag_window, 0, 0);
+ gtk_widget_set_parent_window (column->button, tree_view->priv->drag_window);
+
+
+ tree_view->priv->drag_column = column;
+ gdk_window_show (tree_view->priv->drag_window);
+
+ while (gtk_events_pending ())
+ gtk_main_iteration ();
+
+ gdk_pointer_grab (tree_view->priv->drag_window,
+ FALSE,
+ GDK_POINTER_MOTION_MASK|GDK_BUTTON_RELEASE_MASK,
+ NULL, NULL, GDK_CURRENT_TIME);
+
+}
+
static void
gtk_tree_view_queue_draw_node (GtkTreeView *tree_view,
GtkRBTree *tree,
g_signal_connectc (tree_view->priv->model,
"range_changed",
- gtk_tree_view_range_changed,
+ (GCallback) gtk_tree_view_range_changed,
tree_view,
FALSE);
g_signal_connectc (tree_view->priv->model,
"inserted",
- gtk_tree_view_inserted,
+ (GCallback) gtk_tree_view_inserted,
tree_view,
FALSE);
g_signal_connectc (tree_view->priv->model,
"has_child_toggled",
- gtk_tree_view_has_child_toggled,
+ (GCallback) gtk_tree_view_has_child_toggled,
tree_view,
FALSE);
g_signal_connectc (tree_view->priv->model,
"deleted",
- gtk_tree_view_deleted,
+ (GCallback) gtk_tree_view_deleted,
tree_view,
FALSE);
g_signal_connectc (tree_view->priv->model,
"reordered",
- gtk_tree_view_reordered,
+ (GCallback) gtk_tree_view_reordered,
tree_view,
FALSE);
gboolean havoc;
gboolean tim;
gboolean owen;
+ gboolean dave;
gboolean world_holiday; /* shared by the european hackers */
TreeStruct *children;
};
+
static TreeStruct january[] =
{
- {"New Years Day", TRUE, TRUE, TRUE, TRUE, TRUE, NULL},
- {"Presidential Inauguration", FALSE, TRUE, FALSE, TRUE, FALSE, NULL},
- {"Martin Luther King Jr. day", FALSE, TRUE, FALSE, TRUE, FALSE, NULL},
+ {"New Years Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
+ {"Presidential Inauguration", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
+ {"Martin Luther King Jr. day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
{ NULL }
};
static TreeStruct february[] =
{
- { "Presidents' Day", FALSE, TRUE, FALSE, TRUE, FALSE, NULL },
- { "Groundhog Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "Valentine's Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+ { "Presidents' Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
+ { "Groundhog Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Valentine's Day", FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, NULL },
{ NULL }
};
static TreeStruct march[] =
{
- { "National Tree Planting Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "St Patrick's Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+ { "National Tree Planting Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "St Patrick's Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
{ NULL }
};
static TreeStruct april[] =
{
- { "April Fools' Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
- { "Army Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "Earth Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
- { "Administrative Professionals' Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "April Fools' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+ { "Army Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Earth Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+ { "Administrative Professionals' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
{ NULL }
};
static TreeStruct may[] =
{
- { "Nurses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "National Day of Prayer", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "Mothers' Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
- { "Armed Forces Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "Memorial Day", TRUE, TRUE, TRUE, TRUE, TRUE, NULL },
+ { "Nurses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "National Day of Prayer", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Mothers' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+ { "Armed Forces Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Memorial Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
{ NULL }
};
static TreeStruct june[] =
{
- { "June Fathers' Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
- { "Juneteenth (Liberation of Slaves)", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "Flag Day", FALSE, TRUE, FALSE, TRUE, FALSE, NULL },
+ { "June Fathers' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+ { "Juneteenth (Liberation of Slaves)", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Flag Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
{ NULL }
};
static TreeStruct july[] =
{
- { "Parents' Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
- { "Independence Day", FALSE, TRUE, FALSE, TRUE, FALSE, NULL },
+ { "Parents' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+ { "Independence Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
{ NULL }
};
static TreeStruct august[] =
{
- { "Air Force Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "Coast Guard Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "Friendship Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Air Force Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Coast Guard Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Friendship Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
{ NULL }
};
static TreeStruct september[] =
{
- { "Grandparents' Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
- { "Citizenship Day or Constitution Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "Labor Day", TRUE, TRUE, TRUE, TRUE, TRUE, NULL },
+ { "Grandparents' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+ { "Citizenship Day or Constitution Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Labor Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
{ NULL }
};
static TreeStruct october[] =
{
- { "National Children's Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "Bosses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "Sweetest Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "Mother-in-Law's Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "Navy Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "Columbus Day", FALSE, TRUE, FALSE, TRUE, FALSE, NULL },
- { "Halloween", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+ { "National Children's Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Bosses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Sweetest Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Mother-in-Law's Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Navy Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Columbus Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
+ { "Halloween", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
{ NULL }
};
static TreeStruct november[] =
{
- { "Marine Corps Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "Veterans' Day", TRUE, TRUE, TRUE, TRUE, TRUE, NULL },
- { "Thanksgiving", FALSE, TRUE, FALSE, TRUE, FALSE, NULL },
+ { "Marine Corps Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Veterans' Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
+ { "Thanksgiving", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
{ NULL }
};
static TreeStruct december[] =
{
- { "Pearl Harbor Remembrance Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
- { "Christmas", TRUE, TRUE, TRUE, TRUE, TRUE, NULL },
- { "Kwanzaa", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Pearl Harbor Remembrance Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+ { "Christmas", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
+ { "Kwanzaa", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
{ NULL }
};
static TreeStruct toplevel[] =
{
- {"January", FALSE, FALSE, FALSE, FALSE, FALSE, january},
- {"February", FALSE, FALSE, FALSE, FALSE, FALSE, february},
- {"March", FALSE, FALSE, FALSE, FALSE, FALSE, march},
- {"April", FALSE, FALSE, FALSE, FALSE, FALSE, april},
- {"May", FALSE, FALSE, FALSE, FALSE, FALSE, may},
- {"June", FALSE, FALSE, FALSE, FALSE, FALSE, june},
- {"July", FALSE, FALSE, FALSE, FALSE, FALSE, july},
- {"August", FALSE, FALSE, FALSE, FALSE, FALSE, august},
- {"September", FALSE, FALSE, FALSE, FALSE, FALSE, september},
- {"October", FALSE, FALSE, FALSE, FALSE, FALSE, october},
- {"November", FALSE, FALSE, FALSE, FALSE, FALSE, november},
- {"December", FALSE, FALSE, FALSE, FALSE, FALSE, december},
+ {"January", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, january},
+ {"February", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, february},
+ {"March", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, march},
+ {"April", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, april},
+ {"May", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, may},
+ {"June", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, june},
+ {"July", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, july},
+ {"August", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, august},
+ {"September", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, september},
+ {"October", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, october},
+ {"November", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, november},
+ {"December", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, december},
{NULL}
};
HAVOC_COLUMN,
TIM_COLUMN,
OWEN_COLUMN,
+ DAVE_COLUMN,
VISIBLE_COLUMN,
WORLD_COLUMN,
NUM_COLUMNS
TreeStruct *month = toplevel;
GtkTreeIter iter;
- model = gtk_tree_store_new_with_types (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN);
+ model = gtk_tree_store_new_with_types (NUM_COLUMNS,
+ G_TYPE_STRING,
+ G_TYPE_BOOLEAN,
+ G_TYPE_BOOLEAN,
+ G_TYPE_BOOLEAN,
+ G_TYPE_BOOLEAN,
+ G_TYPE_BOOLEAN,
+ G_TYPE_BOOLEAN,
+ G_TYPE_BOOLEAN);
while (month->label)
{
HAVOC_COLUMN, FALSE,
TIM_COLUMN, FALSE,
OWEN_COLUMN, FALSE,
+ DAVE_COLUMN, FALSE,
VISIBLE_COLUMN, FALSE,
WORLD_COLUMN, FALSE,
-1);
HAVOC_COLUMN, holiday->havoc,
TIM_COLUMN, holiday->tim,
OWEN_COLUMN, holiday->owen,
+ DAVE_COLUMN, holiday->dave,
VISIBLE_COLUMN, TRUE,
WORLD_COLUMN, holiday->world_holiday,
-1);
gtk_tree_path_free (path);
}
+static void
+dave_toggled (GtkCellRendererToggle *cell,
+ gchar *path_str,
+ gpointer data)
+{
+ GtkTreeModel *model = (GtkTreeModel *) data;
+ GtkTreeIter iter;
+ GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
+ gboolean dave;
+
+ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_model_get (model, &iter, DAVE_COLUMN, &dave, -1);
+
+ dave = !dave;
+ gtk_tree_store_set (GTK_TREE_STORE (model), &iter, DAVE_COLUMN, dave, -1);
+
+ gtk_tree_path_free (path);
+}
+
int
main (int argc, char *argv[])
{
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title (GTK_WINDOW (window), "Card planning sheet");
gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
vbox = gtk_vbox_new (FALSE, 8);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
model = make_model ();
tree_view = gtk_tree_view_new_with_model (model);
- g_object_unref (G_OBJECT (model));
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
renderer = gtk_cell_renderer_text_new ();
gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
g_object_unref (renderer);
+ /* Owen Column */
+ renderer = gtk_cell_renderer_toggle_new ();
+ g_signal_connect_data (G_OBJECT (renderer), "toggled", dave_toggled, model, NULL, FALSE, FALSE);
+ g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
+ col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+ -1, "Dave",
+ renderer,
+ "active", DAVE_COLUMN,
+ "visible", VISIBLE_COLUMN,
+ NULL);
+ column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
+ gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
+ g_object_unref (renderer);
+
+ gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
+
+ gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
+ GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
+ NULL);
+ gtk_window_set_default_size (GTK_WINDOW (window),
+ 650, 400);
+ gtk_widget_show_all (window);
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title (GTK_WINDOW (window), "Model");
+ gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
+ vbox = gtk_vbox_new (FALSE, 8);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
+ gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("The model revealed"), FALSE, FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (window), vbox);
+
+ scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
+
+
+ tree_view = gtk_tree_view_new_with_model (model);
+ g_object_unref (G_OBJECT (model));
+ gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+ -1, "Holiday Column",
+ renderer,
+ "text", 0, NULL);
+ g_object_unref (renderer);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+ -1, "Alex Column",
+ renderer,
+ "text", 1, NULL);
+ g_object_unref (renderer);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+ -1, "Havoc Column",
+ renderer,
+ "text", 2, NULL);
+ g_object_unref (renderer);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+ -1, "Tim Column",
+ renderer,
+ "text", 3, NULL);
+ g_object_unref (renderer);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+ -1, "Owen Column",
+ renderer,
+ "text", 4, NULL);
+ g_object_unref (renderer);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+ -1, "Dave Column",
+ renderer,
+ "text", 5, NULL);
+ g_object_unref (renderer);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+ -1, "Visible Column",
+ renderer,
+ "text", 6, NULL);
+ g_object_unref (renderer);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+ -1, "World Holiday",
+ renderer,
+ "text", 7, NULL);
+ g_object_unref (renderer);
+
+ gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
+ GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
+ NULL);
+
gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
+
+ gtk_window_set_default_size (GTK_WINDOW (window),
+ 650, 400);
+
gtk_widget_show_all (window);
gtk_main ();